# -*- coding: utf-8 -*-
# Copyright 2013-2017 Camptocamp SA
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html)

"""

Backend Adapter
===============

An external adapter has a common interface to speak with the backend.
It translates the basic orders (search, read, write) to the protocol
used by the backend.

"""

from odoo.addons.component.core import AbstractComponent


class BackendAdapter(AbstractComponent):
    """ Base Backend Adapter for the connectors """

    _name = 'base.backend.adapter'
    _inherit = 'base.connector'
    _usage = 'backend.adapter'


class CRUDAdapter(AbstractComponent):
    """ Base External Adapter specialized in the handling
    of records on external systems.

    This is an empty shell, Components can inherit and implement their own
    implementation for the methods.

    """

    _name = 'base.backend.adapter.crud'
    _inherit = 'base.backend.adapter'
    _usage = 'backend.adapter'

    def search(self, *args, **kwargs):
        """ Search records according to some criterias
        and returns a list of ids """
        raise NotImplementedError

    def read(self, *args, **kwargs):
        """ Returns the information of a record """
        raise NotImplementedError

    def search_read(self, *args, **kwargs):
        """ Search records according to some criterias
        and returns their information"""
        raise NotImplementedError

    def create(self, *args, **kwargs):
        """ Create a record on the external system """
        raise NotImplementedError

    def write(self, *args, **kwargs):
        """ Update records on the external system """
        raise NotImplementedError

    def delete(self, *args, **kwargs):
        """ Delete a record on the external system """
        raise NotImplementedError
